// Copyright 2021 by 马万里. All rights reserved.
// 开发团队 ：   鸡中之霸
// 开发人员 ：   马万里
// 开发时间 ：   2021/2/28 14:47
// 文件名称 ：   main.go
// 工程名称 ：   netpan
// 开发工具 ：   GoLand
//

package transfer

import (
	"bufio"
	"encoding/json"
	"johnsonsmile.cn/netpan/config"
	myDB "johnsonsmile.cn/netpan/db"
	"johnsonsmile.cn/netpan/mq"
	"johnsonsmile.cn/netpan/store/oss"
	"log"
	"os"
)

// ProcessTransfer: 处理文件转义的真正逻辑
func ProcessTransfer(msg []byte) bool {
	// 1. 解析msg
	pubData := mq.TransferData{}
	err := json.Unmarshal(msg, pubData)
	if err != nil {
		log.Println(err.Error())
		return false
	}

	// 2. 根据临时存储路径创建文件句柄
	filed, err := os.Open(pubData.CurLocation)
	if err != nil {
		log.Println(err.Error())
		return false
	}
	defer filed.Close()

	// 3. 通过文件句柄将文件内容读取处理出来并且上传到oss
	err = oss.Bucket().PutObject(
		pubData.DestLocation,
		bufio.NewReader(filed),
	)
	if err != nil {
		log.Println(err.Error())
		return false
	}
	// 4. 更新文件的存储路径到文件表
	suc := myDB.UpdateFileLocation(
		pubData.FileHash,
		pubData.DestLocation,
	)
	return suc
}

func main() {
	log.Println("开始监听转移任务队列...")
	mq.StartConsume(
		config.TransOSSQueueName,
		"transfer_oss",
		ProcessTransfer)
}
